package com.master.rl;

import java.sql.*;
import java.text.*;

import com.master.root.*;
import com.master.util.*;
import com.master.util.bd.*;
import com.master.util.ed.*;
import com.master.util.rl.*;
import com.master.ed.PostagemED;

public class PostagemRL
    extends Transacao {

  FormataDataBean dataFormatada = new FormataDataBean ();
  Parametro_FixoED parametro_FixoED = new Parametro_FixoED ();

  private ExecutaSQL executasql;

  public PostagemRL () {

  }

  public byte[] geraRelPostagem (ResultSet res , PostagemED ed) throws Excecoes {

    double iTotalPorCTRC = 0;
    int iTotalGeral = 0;

    double nr_peso = 0;
    double nr_peso_cubado = 0;
    double nr_volumes = 0;
    double vl_total_frete = 0;
    double vl_total_nota_fiscal = 0;
    double nr_peso_geral = 0;

    double nr_volumes_geral = 0;
    double vl_total_frete_geral = 0;
    String sqlBusca = null;
    ResultSet resLocal = null;
    String branco = "                                                                 ";

    try {

      GeraXML x = new GeraXML ();
      DecimalFormat dec = new DecimalFormat ("###,###,##0.00");
      DecimalFormat dec2 = new DecimalFormat ("###,###,##0.0");
      DecimalFormat dec3 = new DecimalFormat ("#,###,##0");

      x.insereDTD ();

      x.insereTagXML ("RELATORIO" , GeraXML.ABRE);

      x.insereTagXML ("ID_RELATORIO" , GeraXML.ABRE);

      x.insereElementoXML ("CODIGO" , "conR010");
      x.insereElementoXML ("TITULO" , "Postagens");

      x.insereElementoXML ("DT_INICIAL" , dataFormatada.getDT_FormataData (ed.getDT_Postagem_Inicial ()));
      x.insereElementoXML ("DT_FINAL" , dataFormatada.getDT_FormataData (ed.getDT_Postagem_Final ()));

      x.insereTagXML ("ID_RELATORIO" , GeraXML.FECHA);
      x.insereTagXML ("PROCESSAMENTO" , GeraXML.ABRE);

      String data = Data.getDataDMY ();
      String hora = Data.getHoraHM ();

      x.insereElementoXML ("DATA" , data);
      x.insereElementoXML ("HORARIO" , hora);
      x.insereTagXML ("PROCESSAMENTO" , GeraXML.FECHA);
      x.insereTagXML ("LISTA_UNID" , GeraXML.ABRE);

      boolean bPrimVez = true;
      String oid_Conhecimento = "";

      while (res.next ()) {

        this.inicioTransacao ();
        this.executasql = this.sql;

        //primeira volta no loop
        if (bPrimVez == true) {
          // //  (" cto emb 2");

          bPrimVez = false;

          x.insereTagXML ("UNID" , GeraXML.ABRE);
          sqlBusca = "Select " +
              " pessoas.nm_razao_social  " +
              " from " +
              " pessoas " +
              " where " +
              " pessoas.oid_pessoa = '" + res.getString ("oid_Pessoa_Empresa") + "'";

          resLocal = this.executasql.executarConsulta (sqlBusca);

          while (resLocal.next ()) {
            x.insereElementoXML ("COD" , "-" + resLocal.getString ("nm_razao_social"));
          }

          // //  (" cto emb 3");

          x.insereTagXML ("PERIODO" , GeraXML.ABRE);
          x.insereElementoXML ("DT_INICIAL" , dataFormatada.getDT_FormataData (ed.getDT_Postagem_Inicial ()));
          x.insereElementoXML ("DT_FINAL" , dataFormatada.getDT_FormataData (ed.getDT_Postagem_Final ()));
          x.insereTagXML ("PERIODO" , GeraXML.FECHA);
          x.insereTagXML ("LISTA_CTRC" , GeraXML.ABRE);
        }

        x.insereTagXML ("CTRC" , GeraXML.ABRE);

        // //  (" cto emb 7");

          x.insereElementoXML ("UNIDADE" , res.getString ("cd_Unidade"));
          x.insereElementoXML ("NRO" , res.getString ("nr_conhecimento") == null ? "" : res.getString ("nr_conhecimento"));
          x.insereElementoXML ("DT_EMISSAO" , res.getString ("dt_emissao") == null ? "" : dataFormatada.getDT_FormataData (res.getString ("dt_emissao")));

          // //  (" cto emb 8");

          sqlBusca = "Select " +
              " CD_Modal, NM_Modal  " +
              " from " +
              " Modal " +
              " where " +
              " Modal.oid_Modal = " + res.getString ("oid_Modal");

          resLocal = this.executasql.executarConsulta (sqlBusca);
          while (resLocal.next ()) {
            x.insereElementoXML ("MODAL" , resLocal.getString ("CD_Modal") == null ? "" : resLocal.getString ("CD_Modal"));
          }

          // //  (" cto emb 9");

          sqlBusca = "Select " +
              " pessoas.nm_razao_social, " +
              " pessoas.NM_Endereco , " +
              " pessoas.NR_CNPJ_CPF , " +
              " pessoas.NM_INSCRICAO_ESTADUAL , " +
              " cidades.NM_Cidade , " +
              " estados.CD_Estado " +
              " from " +
              " pessoas, " +
              " cidades, " +
              " estados, " +
              " regioes_estados " +
              " where " +
              " pessoas.oid_cidade = cidades.oid_cidade and" +
              " cidades.oid_regiao_Estado = regioes_estados.oid_regiao_estado and" +
              " regioes_estados.oid_Estado = estados.oid_Estado and" +
              " pessoas.oid_pessoa = '" + res.getString ("oid_Pessoa") + "'";

          resLocal = this.executasql.executarConsulta (sqlBusca);

          while (resLocal.next ()) {
            // //  (" cto emb 10");
            x.insereElementoXML ("REMETENTE" , (resLocal.getString ("nm_razao_social") + branco).substring (0 , 20));
            x.insereElementoXML ("CIDADE_REMETENTE" , (resLocal.getString ("NM_Cidade") + branco).substring (0 , 17) + "/" + resLocal.getString ("CD_Estado"));
            x.insereElementoXML ("REMET_CID" , (resLocal.getString ("nm_razao_social") + branco).substring (0 , 12) + "-" + (resLocal.getString ("NM_Cidade") + branco).substring (0 , 11) + "/" + resLocal.getString ("CD_Estado"));
          }

          // //  (" cto emb 11");

          sqlBusca = "Select " +
              " pessoas.nm_razao_social, " +
              " pessoas.NM_Endereco , " +
              " pessoas.NR_CNPJ_CPF , " +
              " pessoas.NM_INSCRICAO_ESTADUAL , " +
              " cidades.NM_Cidade , " +
              " estados.CD_Estado " +
              " from " +
              " pessoas, " +
              " cidades, " +
              " estados, " +
              " regioes_estados " +
              " where " +
              " pessoas.oid_cidade = cidades.oid_cidade and" +
              " cidades.oid_regiao_Estado = regioes_estados.oid_regiao_estado and" +
              " regioes_estados.oid_Estado = estados.oid_Estado and" +
              " pessoas.oid_pessoa = '" + res.getString ("oid_Pessoa_Destinatario") + "'";

          resLocal = this.executasql.executarConsulta (sqlBusca);

          while (resLocal.next ()) {
            // //  (" cto emb 12");
            x.insereElementoXML ("DESTINATARIO" , (resLocal.getString ("nm_razao_social") + branco).substring (0 , 20));
            x.insereElementoXML ("CIDADE_DESTINATARIO" , (resLocal.getString ("NM_Cidade") + branco).substring (0 , 17) + "/" + resLocal.getString ("CD_Estado"));
            x.insereElementoXML ("DEST_CID" , (resLocal.getString ("nm_razao_social") + branco).substring (0 , 12) + "-" + (resLocal.getString ("NM_Cidade") + branco).substring (0 , 11) + "/" + resLocal.getString ("CD_Estado"));
          }
          if (res.getString ("DM_Situacao") != null && !res.getString ("DM_Situacao").equals ("C")) {

            x.insereElementoXML ("PESO" , dec2.format (res.getDouble ("nr_peso")) == null ? "" : dec2.format (res.getDouble ("nr_peso")));
            x.insereElementoXML ("PESO_CU" , dec2.format (res.getDouble ("nr_peso_cubado")) == null ? "" : dec2.format (res.getDouble ("nr_peso_cubado")));

            // //  (" cto emb 13");
            double peso = res.getDouble ("nr_peso");

            x.insereElementoXML ("VOLUMES" , res.getString ("nr_volumes") == null ? "" : res.getString ("nr_volumes"));

            // //  (" cto emb 14");

            String dm_tipo_pagamento = "CIF";
            String dm_tipo_calculo = "INF";
            if ("2".equals (res.getString ("dm_tipo_pagamento"))) {
              dm_tipo_pagamento = "FOB";
            }

            if ("3".equals (res.getString ("dm_tipo_pagamento"))) {
              dm_tipo_pagamento = "CSG";
            }

            if ("T".equals (res.getString ("dm_tipo_calculo"))) {
              dm_tipo_calculo = "TAB";
            }

            x.insereElementoXML ("TIPO_PGTO" , dm_tipo_pagamento + " (" + dm_tipo_calculo + ")");

            // //  (" cto emb 16");

            x.insereElementoXML ("TOTAL_FRETE" , dec.format (res.getDouble ("vl_total_frete")) == null ? "" : dec.format (res.getDouble ("vl_total_frete")));

            x.insereElementoXML ("FRETE_PESO" , dec.format (res.getDouble ("vl_frete_peso")) == null ? "" : dec.format (res.getDouble ("vl_frete_peso")));
            x.insereElementoXML ("FRETE_VALOR" , dec.format (res.getDouble ("vl_frete_valor")) == null ? "" : dec.format (res.getDouble ("vl_frete_valor")));
            x.insereElementoXML ("PEDAGIO" , dec.format (res.getDouble ("vl_pedagio")) == null ? "" : dec.format (res.getDouble ("vl_pedagio")));
            x.insereElementoXML ("SEC_CAT" , dec.format (res.getDouble ("vl_sec_cat")) == null ? "" : dec.format (res.getDouble ("vl_sec_cat")));
            x.insereElementoXML ("OUTROS" , dec.format (res.getDouble ("vl_outros1") + res.getDouble ("vl_outros2")));
            x.insereElementoXML ("DESPACHO" , dec.format (res.getDouble ("vl_despacho")) == null ? "" : dec.format (res.getDouble ("vl_despacho")));
            x.insereElementoXML ("ICMS" , dec.format (res.getDouble ("vl_icms")) == null ? "" : dec.format (res.getDouble ("vl_icms")));

            // //  (" cto emb 16 a");
            x.insereElementoXML ("VAL_MERCADORIA" , dec.format (res.getDouble ("VL_NOTA_FISCAL")) == null ? "" : dec.format (res.getDouble ("VL_NOTA_FISCAL")));
            // //  (" cto emb 16 b");


            nr_peso = nr_peso + res.getDouble ("nr_peso");
            nr_peso_cubado = nr_peso_cubado + res.getDouble ("nr_peso_cubado");
            nr_volumes = nr_volumes + res.getDouble ("nr_volumes");
            vl_total_frete = vl_total_frete + res.getDouble ("vl_total_frete");
            vl_total_nota_fiscal = vl_total_nota_fiscal + res.getDouble ("VL_NOTA_FISCAL");

            nr_peso_geral = nr_peso_geral + res.getDouble ("nr_peso");
            nr_volumes_geral = nr_volumes_geral + res.getDouble ("nr_volumes");
            vl_total_frete_geral = vl_total_frete_geral + res.getDouble ("vl_total_frete");
          }
          else {
            x.insereElementoXML ("NOTA_FISCAL1" , "CANCELADO");
          }
          iTotalPorCTRC++;
          iTotalGeral++;
        x.insereElementoXML ("OBS" , (res.getString ("TX_Observacao") == null ? "" : res.getString ("TX_Observacao")) + " " + (res.getString ("NR_Lote") == null ? "" : res.getString ("NR_Lote")));

        x.insereTagXML ("CTRC" , GeraXML.FECHA);
        this.fimTransacao (true);
      }

      x.insereTagXML ("UNID" , GeraXML.FECHA);
      x.insereTagXML ("LISTA_UNID" , GeraXML.FECHA);
      x.insereTagXML ("RELATORIO" , GeraXML.FECHA);

      GeraPDF geraPDF = new GeraPDF ();
      geraPDF.setXML (x.retornaXML ());

      // //  (x.retornaXML ().toString ());

      String CaminhoXSL = System.getProperty ("CaminhoXSL");
      String relatorio = "Relacao_de_Conhecimentos_Embarques";

      geraPDF.setXSL (new StringBuffer (CaminhoXSL + relatorio + ".xsl"));
      geraPDF.parseToBytes ();

      byte[] b = geraPDF.getArrayPDF ();
      return b;

    }
    catch (Exception e) {
      e.printStackTrace ();
      Excecoes exc = new Excecoes ();
      exc.setExc (e);
      exc.setMensagem ("->> Nenhuma Postagem Relacionado!");
      exc.setClasse (this.getClass ().getName ());
      exc.setMetodo ("");
      throw exc;
    }

  }
} //classe
